Load packages

Load Hardship-list

Scale and reverse coding

[1] "code"               "label"              "codeWVS"            "homiciderate"       "gdp"                "infantmortality"   
[7] "lifeexpectancy"     "gini"               "femalemale_primedu"

Data of Wave 5

#rename the variables

  [1] "wave"          "V1A"           "V1B"           "country_code"  "V2A"           "V3"            "V4"           
  [8] "V4_CO"         "V5"            "V5_CO"         "V6"            "V6_CO"         "V7"            "V7_CO"        
 [15] "V8"            "V8_CO"         "V9"            "V9_CO"         "V10"           "V11"           "V12"          
 [22] "V13"           "V14"           "V15"           "V16"           "V17"           "V18"           "V19"          
 [29] "V20"           "V21"           "V22"           "V23"           "V24"           "V25"           "V26"          
 [36] "V27"           "V28"           "V29"           "V30"           "V31"           "V32"           "V33"          
 [43] "V34"           "V35"           "V36"           "V37"           "V38"           "V39"           "V40"          
 [50] "V41"           "V42"           "V43"           "V43_01"        "V43_02"        "V43_03"        "V43_04"       
 [57] "V43_05"        "V43_06"        "V43_07"        "V43_08"        "V43_09"        "V43_10"        "V43_11"       
 [64] "V43_12"        "V43_13"        "V43_14"        "V43_15"        "V43_16"        "V43_17"        "V43_18"       
 [71] "V43_19"        "V43_20"        "V43_21"        "V43_22"        "V43_23"        "V43_24"        "V43_25"       
 [78] "V43_26"        "V43_27"        "V43_28"        "V43_29"        "V43_30"        "V44"           "V45"          
 [85] "V46"           "V47"           "V48"           "V49"           "V50"           "V51"           "V52"          
 [92] "V53"           "V54"           "married"       "children"      "V57"           "V58"           "V59"          
 [99] "V60"           "V61"           "V62"           "V63"           "V64"           "V65"           "V66"          
[106] "V67"           "V68"           "V69"           "V69_HK"        "V70"           "V70_HK"        "V71"          
[113] "V72"           "V73"           "V73_HK"        "V74"           "V74_HK"        "V75"           "V76"          
[120] "V77"           "V78"           "V79"           "V80"           "V81"           "V82"           "V83"          
[127] "V84"           "V85"           "risktaking"    "V87"           "V88"           "V89"           "V90"          
[134] "V91"           "V92"           "V93"           "V94"           "V95"           "V96"           "V97"          
[141] "V98"           "V99"           "V100"          "V101"          "V102"          "V103"          "V104"         
[148] "V105"          "V106"          "V107"          "V108"          "V109"          "V110"          "V111"         
[155] "V112"          "V113"          "V114"          "V115"          "V116"          "V117"          "V118"         
[162] "V119"          "V120"          "V121"          "V122"          "V123"          "V124"          "V125"         
[169] "V126"          "V127"          "V128"          "V129"          "V130"          "V130_CA_1"     "V130_IQ_1"    
[176] "V130_IQ_2"     "V130_IQ_3"     "V130_IQ_4"     "V130_NZ_1"     "V130_NZ_2"     "V131"          "V132"         
[183] "V133"          "V134"          "V135"          "V136"          "V137"          "V138"          "V139"         
[190] "V140"          "V141"          "V142"          "V143"          "V144"          "V145"          "V146_00"      
[197] "V146_01"       "V146_02"       "V146_03"       "V146_04"       "V146_05"       "V146_06"       "V146_07"      
[204] "V146_08"       "V146_09"       "V146_10"       "V146_11"       "V146_12"       "V146_13"       "V146_14"      
[211] "V146_15"       "V146_16"       "V146_17"       "V146_18"       "V146_19"       "V146_20"       "V146_21"      
[218] "V146_22"       "V147"          "V148"          "V149"          "V150"          "V151"          "V151_IQ_A"    
[225] "V151_IQ_B"     "V152"          "V153"          "V154"          "V155"          "V156"          "V157"         
[232] "V158"          "V159"          "V160"          "V161"          "V162"          "V163"          "V164"         
[239] "V165"          "V166"          "V167"          "V168"          "V169"          "V170"          "V171"         
[246] "V172"          "V173"          "V174"          "V175"          "V176"          "V177"          "V178"         
[253] "V179"          "V180"          "V181"          "V182"          "V183"          "V184"          "V185"         
[260] "V186"          "V187"          "V188"          "V189"          "V190"          "V191"          "V192"         
[267] "V193"          "V194"          "V195"          "V196"          "V197"          "V198"          "V199"         
[274] "V200"          "V201"          "V202"          "V203"          "V204"          "V205"          "V206"         
[281] "V207"          "V208"          "V209"          "V210"          "V211"          "V212"          "V213A"        
[288] "V213B"         "V213C"         "V213D"         "V213E"         "V213F"         "V213G"         "V213H"        
[295] "V213K"         "V213L"         "V213M"         "V213N"         "V214"          "V215"          "V216"         
[302] "V217"          "V218"          "V219"          "V220"          "V221"          "V222"          "V223"         
[309] "V224"          "V225"          "V226"          "V227"          "V228"          "V229"          "V230"         
[316] "V231"          "V232"          "V233"          "V233A"         "V234"          "gender"        "V236"         
[323] "age"           "education"     "V238CS"        "V239"          "V240"          "employed"      "V242"         
[330] "V242A_CO"      "V243"          "V244"          "V245"          "V246"          "V247"          "V248"         
[337] "V249"          "V250"          "V251"          "V252"          "V252B"         "V253"          "V253CS"       
[344] "V254"          "V255"          "V255CS"        "V256"          "V257"          "V257B"         "V257C"        
[351] "V258"          "V259"          "V259A"         "V260"          "V261"          "V262"          "V263"         
[358] "V264"          "V265"          "S024"          "S025"          "Y001"          "Y002"          "Y003"         
[365] "SACSECVAL"     "SECVALWGT"     "RESEMAVAL"     "WEIGHTB"       "I_AUTHORITY"   "I_NATIONALISM" "I_DEVOUT"     
[372] "DEFIANCE"      "WEIGHT1A"      "I_RELIGIMP"    "I_RELIGBEL"    "I_RELIGPRAC"   "DISBELIEF"     "WEIGHT2A"     
[379] "I_NORM1"       "I_NORM2"       "I_NORM3"       "RELATIVISM"    "WEIGHT3A"      "I_TRUSTARMY"   "I_TRUSTPOLICE"
[386] "I_TRUSTCOURTS" "SCEPTICISM"    "WEIGHT4A"      "I_INDEP"       "I_IMAGIN"      "I_NONOBED"     "AUTONOMY"     
[393] "WEIGHT1B"      "I_WOMJOB"      "I_WOMPOL"      "I_WOMEDU"      "EQUALITY"      "WEIGHT2B"      "I_HOMOLIB"    
[400] "I_ABORTLIB"    "I_DIVORLIB"    "CHOICE"        "WEIGHT3B"      "I_VOICE1"      "I_VOICE2"      "I_VOI2_00"    
[407] "VOICE"         "WEIGHT4B"      "S001"          "S007"          "S018"          "S019"          "S021"         
[414] "COW"          

Read countrynames data from the CSV file (to decode the dataset 5)


              Andorra             Argentina             Australia                Brazil              Bulgaria 
                 1003                  1002                  1421                  1500                  1001 
         Burkina Faso                Canada                 Chile                 China              Colombia 
                 1534                  2164                  1000                  1991                  3025 
           Cyprus (G)                 Egypt              Ethiopia               Finland                France 
                 1050                  3051                  1500                  1014                  1001 
              Georgia               Germany                 Ghana         Great Britain             Guatemala 
                 1500                  2064                  1534                  1041                  1000 
            Hong Kong               Hungary                 India             Indonesia                  Iran 
                 1252                  1007                  2001                  2015                  2667 
                 Iraq                 Italy                 Japan                Jordan              Malaysia 
                 2701                  1012                  1096                  1200                  1201 
                 Mali                Mexico               Moldova               Morocco           Netherlands 
                 1534                  1560                  1046                  1200                  1050 
          New Zealand                Norway                  Peru                Poland               Romania 
                  954                  1025                  1500                  1000                  1776 
               Russia                Rwanda Serbia and Montenegro              Slovenia          South Africa 
                 2033                  1507                  1220                  1037                  2988 
          South Korea                 Spain                Sweden           Switzerland                Taiwan 
                 1200                  1200                  1003                  1241                  1227 
             Thailand   Trinidad and Tobago                Turkey               Ukraine         United States 
                 1534                  1002                  1346                  1000                  1249 
              Uruguay              Viet Nam                Zambia 
                 1000                  1495                  1500 

#Read Dataset (Wave 6)

#rename the variables

Add the countrynames


            Algeria           Argentina             Armenia           Australia          Azerbaijan             Belarus 
               1200                1030                1100                1477                1002                1535 
             Brazil               Chile               China            Colombia          Cyprus (G)             Ecuador 
               1486                1000                2300                1512                1000                1202 
              Egypt             Estonia             Georgia             Germany               Ghana               Haiti 
               1523                1533                1202                2046                1552                1996 
          Hong Kong               India                Iraq               Japan              Jordan          Kazakhstan 
               1000                4078                1200                2443                1200                1500 
             Kuwait          Kyrgyzstan             Lebanon               Libya            Malaysia              Mexico 
               1303                1500                1200                2131                1300                2000 
            Morocco         Netherlands         New Zealand             Nigeria            Pakistan           Palestine 
               1200                1902                 841                1759                1200                1000 
               Peru         Philippines              Poland               Qatar             Romania              Russia 
               1210                1200                 966                1060                1503                2500 
             Rwanda           Singapore            Slovenia        South Africa         South Korea               Spain 
               1527                1972                1069                3531                1200                1189 
             Sweden              Taiwan            Thailand Trinidad and Tobago             Tunisia              Turkey 
               1206                1238                1200                 999                1205                1605 
            Ukraine       United States             Uruguay          Uzbekistan               Yemen            Zimbabwe 
               1500                2232                1000                1500                1000                1500 

Bind data

 [1]  38  24  48  28  54  44  70  60  27  35  73  33  46  41  59  26  45  21  22  31  20  56  29  30  61  47  40  57  67  43  25
[32]  62  23  64  42  19  52  51  39  36  37  49  34  71  32  69  50  63  65  55  72  18  58  68  75  53  78  76  88  66  84  79
[63]  77  74  80  82  83  85  86  90  81  87  -2  89  94  95  17  16  91  92  -1  93  15  -5  97  98  NA  99 102
[1] NA NA

Remove missing data

Transfrom risk item such that high values represent more risk taking

Dichotom variables

 [1] "gender"             "age"                "country_code"       "wave"               "risktaking"         "children"          
 [7] "married"            "employed"           "education"          "country"            "T_score_risktaking" "Z_score_risktaking"
[13] "z_score_age"       
[1] "label"          "code"           "hardship_index"

Add hardship to WVS_mixed_model

Mixed Models

Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: Z_score_risktaking ~ 1 + (1 | country)
   Data: WVS_mixed_model

REML criterion at convergence: 409702.8

Scaled residuals: 
     Min       1Q   Median       3Q      Max 
-2.31854 -0.82565 -0.07222  0.76171  2.53255 

Random effects:
 Groups   Name        Variance Std.Dev.
 country  (Intercept) 0.08536  0.2922  
 Residual             0.90271  0.9501  
Number of obs: 149626, groups:  country, 77

Fixed effects:
            Estimate Std. Error       df t value Pr(>|t|)
(Intercept)  0.01170    0.03341 76.10694    0.35    0.727

age, sex

Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: risktaking ~ 1 + scale(age) + factor(gender) + (1 + scale(age) +      factor(gender) | country)
   Data: WVS_data
Control: lmerControl(optimizer = "bobyqa")

REML criterion at convergence: 539930.7

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-2.4750 -0.7820 -0.0772  0.7523  3.2237 

Random effects:
 Groups   Name            Variance Std.Dev. Corr     
 country  (Intercept)     0.16689  0.4085            
          scale(age)      0.01956  0.1399   0.31     
          factor(gender)1 0.02207  0.1486   0.12 0.25
 Residual                 2.15081  1.4666            
Number of obs: 149626, groups:  country, 77

Fixed effects:
                Estimate Std. Error       df t value Pr(>|t|)    
(Intercept)      3.42058    0.04697 76.22127   72.83   <2e-16 ***
scale(age)      -0.32274    0.01659 74.09811  -19.46   <2e-16 ***
factor(gender)1 -0.36831    0.01887 73.38849  -19.52   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr) scl(g)
scale(age)  0.296        
fctr(gndr)1 0.067  0.222 

#model 2

Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: risktaking ~ 1 + scale(age) + factor(gender) + factor(children) +  
    factor(married) + factor(employed) + factor(education) +  
    (1 + scale(age) + factor(gender) + factor(children) + factor(married) +  
        factor(employed) + factor(education) | country)
   Data: WVS_data
Control: lmerControl(optCtrl = list(maxfun = 30000), optimizer = "bobyqa")

REML criterion at convergence: 538463.9

Scaled residuals: 
     Min       1Q   Median       3Q      Max 
-2.56649 -0.78106 -0.08451  0.74253  3.15001 

Random effects:
 Groups   Name               Variance Std.Dev. Corr                               
 country  (Intercept)        0.139167 0.37305                                     
          scale(age)         0.013141 0.11464   0.23                              
          factor(gender)1    0.023396 0.15296   0.00  0.25                        
          factor(children)1  0.021111 0.14529   0.09  0.17  0.08                  
          factor(married)1   0.010402 0.10199   0.18  0.45  0.54  0.25            
          factor(employed)1  0.007348 0.08572   0.01  0.06  0.03 -0.29 -0.23      
          factor(education)1 0.015082 0.12281  -0.17  0.07  0.10 -0.15  0.08  0.19
 Residual                    2.125987 1.45808                                     
Number of obs: 149626, groups:  country, 77

Fixed effects:
                   Estimate Std. Error       df t value Pr(>|t|)    
(Intercept)         3.52589    0.04497 77.43914  78.411  < 2e-16 ***
scale(age)         -0.23515    0.01418 72.29489 -16.584  < 2e-16 ***
factor(gender)1    -0.34507    0.01948 73.75931 -17.717  < 2e-16 ***
factor(children)1  -0.20808    0.02069 72.08925 -10.056 2.30e-15 ***
factor(married)1   -0.13608    0.01562 62.63906  -8.712 2.14e-12 ***
factor(employed)1   0.01736    0.01331 68.34140   1.304    0.197    
factor(education)1  0.12489    0.01869 51.42871   6.683 1.66e-08 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr) scl(g) fctr(g)1 fctr(c)1 fctr(mr)1 fctr(mp)1
scale(age)   0.202                                             
fctr(gndr)1 -0.048  0.223                                      
fctr(chld)1  0.001  0.029  0.015                               
fctr(mrrd)1  0.104  0.308  0.386   -0.049                      
fctr(mply)1 -0.055  0.083  0.088   -0.208   -0.154             
fctr(dctn)1 -0.263  0.106  0.074   -0.081    0.036     0.065   

Model3

Error in model.frame.default(data = WVS_data, drop.unused.levels = TRUE,  : 
  invalid type (list) for variable 'hardship'

ANOVA

LS0tCnRpdGxlOiAiUiBOb3RlYm9vayIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKCiMgTG9hZCBwYWNrYWdlcwpgYGB7cn0KbGlicmFyeShkYXRhLnRhYmxlKQpsaWJyYXJ5KHRpZHlyKQpsaWJyYXJ5KG1hcHMpCmxpYnJhcnkoaGF2ZW4pCmxpYnJhcnkoZ2dwbG90MikKbGlicmFyeShkcGx5cikKbGlicmFyeShyZWFkeGwpCmxpYnJhcnkobG1lclRlc3QpCmxpYnJhcnkobG1lNCkKYGBgCgojIExvYWQgSGFyZHNoaXAtbGlzdApgYGB7cn0KaGFyZHNoaXBfY29tcGxldGUgPC0gcmVhZF9leGNlbCgiL1VzZXJzL2xhdXJhYmF6emlnaGVyL0RvY3VtZW50cy9HaXRIdWIvcmlza193dnMvZGF0YS9kYXRhc2V0L0hhcmRzaGlwL0hhcmRzaGlwX2NvbXBsZXRlXzIwMjQueGxzeCIpCmhhcmRzaGlwX2NvbXBsZXRlCmBgYAoKIyBTY2FsZSBhbmQgcmV2ZXJzZSBjb2RpbmcKYGBge3J9CiMgw5xiZXJwcsO8ZmVuIGRlciBTcGFsdGVubmFtZW4KY29sbmFtZXMoaGFyZHNoaXBfY29tcGxldGUpCgojIEVudGZlcm5lbiB2b24gTGVlcnplaWNoZW4gaW4gZGVuIFNwYWx0ZW5uYW1lbgpjb2xuYW1lcyhoYXJkc2hpcF9jb21wbGV0ZSkgPC0gbWFrZS5uYW1lcyhjb2xuYW1lcyhoYXJkc2hpcF9jb21wbGV0ZSkpCgojIFZlcnN1Y2hlIGVybmV1dCwgZGllIERhdGVuIHp1IGJlYXJiZWl0ZW4KaGFyZHNoaXBfY29tcGxldGUkaG9taWNpZGVyYXRlIDwtIGxvZyhoYXJkc2hpcF9jb21wbGV0ZSRob21pY2lkZXJhdGUpCmhhcmRzaGlwX2NvbXBsZXRlJGdkcCA8LSBsb2coaGFyZHNoaXBfY29tcGxldGUkZ2RwKQpoYXJkc2hpcF9jb21wbGV0ZSRpbmZhbnRtb3J0YWxpdHkgPC0gbG9nKGhhcmRzaGlwX2NvbXBsZXRlJGluZmFudG1vcnRhbGl0eSkKaGFyZHNoaXBfY29tcGxldGUkbGlmZWV4cGVjdGFuY3kgPC0gbG9nKGhhcmRzaGlwX2NvbXBsZXRlJGxpZmVleHBlY3RhbmN5KQpoYXJkc2hpcF9jb21wbGV0ZSRnaW5pIDwtIGxvZyhoYXJkc2hpcF9jb21wbGV0ZSRnaW5pKQoKIyBSZXZlcnNlIENvZGllcnVuZwpoYXJkc2hpcF9jb21wbGV0ZSRob21pY2lkZXJhdGUgPC0gc2NhbGUoaGFyZHNoaXBfY29tcGxldGUkaG9taWNpZGVyYXRlKQpoYXJkc2hpcF9jb21wbGV0ZSRnZHAgPC0gc2NhbGUoLWhhcmRzaGlwX2NvbXBsZXRlJGdkcCkKaGFyZHNoaXBfY29tcGxldGUkaW5mYW50bW9ydGFsaXR5IDwtIHNjYWxlKGhhcmRzaGlwX2NvbXBsZXRlJGluZmFudG1vcnRhbGl0eSkKaGFyZHNoaXBfY29tcGxldGUkbGlmZWV4cGVjdGFuY3kgPC0gc2NhbGUoLWhhcmRzaGlwX2NvbXBsZXRlJGxpZmVleHBlY3RhbmN5KQpoYXJkc2hpcF9jb21wbGV0ZSRnaW5pIDwtIHNjYWxlKGhhcmRzaGlwX2NvbXBsZXRlJGdpbmkpCgojIE5ldWJlcmVjaG51bmcgZGVzIEhhcmRzaGlwLUluZGV4CmhhcmRzaGlwX2NvbXBsZXRlJGhhcmRzaGlwX2luZGV4IDwtIChoYXJkc2hpcF9jb21wbGV0ZSRob21pY2lkZXJhdGUgKyBoYXJkc2hpcF9jb21wbGV0ZSRnZHAgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhcmRzaGlwX2NvbXBsZXRlJGdpbmkgKyBoYXJkc2hpcF9jb21wbGV0ZSRsaWZlZXhwZWN0YW5jeSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFyZHNoaXBfY29tcGxldGUkaW5mYW50bW9ydGFsaXR5ICsgaGFyZHNoaXBfY29tcGxldGUkZmVtYWxlbWFsZV9wcmltZWR1KSAvIDYKCmhhcmRzaGlwX2NvbXBsZXRlCmBgYAoKIyBEYXRhIG9mIFdhdmUgNSAKYGBge3J9CldWNV9kYXRhIDwtIHJlYWRSRFMoIi9Vc2Vycy9sYXVyYWJhenppZ2hlci9Eb2N1bWVudHMvR2l0SHViL3Jpc2tfd3ZzL2RhdGEvZGF0YXNldC9XVjZfZGF0YXNldF93YXZlXzVfNi9GMDAwMDc5NDQtV1Y1X0RhdGFfUl92MjAxODA5MTIucmRzIikKCiMgQ29udmVydCBXVjVfZGF0YS1vYmplY3QgaW4gZGF0YS5mcmFtZSAKV1Y1X2RhdGFfZGYgPC0gYXMuZGF0YS5mcmFtZShXVjVfZGF0YSkKCiMgc2hvdyBmaXJzdCBmaXZlIGNvbHVtbnMKV1Y1X2RhdGFfZGYKYGBgCgojcmVuYW1lIHRoZSB2YXJpYWJsZXMKYGBge3J9CldWNV9kYXRhIDwtIFdWNV9kYXRhX2RmICU+JQogIHJlbmFtZShnZW5kZXIgPSBWMjM1LCBhZ2UgPSBWMjM3LCBjb3VudHJ5X2NvZGUgPSBWMiwgd2F2ZSA9IFYxLCByaXNrdGFraW5nID0gVjg2LCBjaGlsZHJlbiA9IFY1NiwgbWFycmllZCA9IFY1NSwgZW1wbG95ZWQgPSBWMjQxLCBlZHVjYXRpb24gPSBWMjM4KQpXVjVfZGF0YQoKY29sbmFtZXMoV1Y1X2RhdGEpCgojc2VsZWN0IG9ubHkgdGhlIHZhcmlhYmxlcyBvZiBpbnRlcmVzdApXVjVfZGF0YSA8LSBXVjVfZGF0YSAlPiUKICBkcGx5cjo6c2VsZWN0KGdlbmRlciwgYWdlLCBjb3VudHJ5X2NvZGUsIHdhdmUsIHJpc2t0YWtpbmcsIGNoaWxkcmVuLCBtYXJyaWVkLCBlbXBsb3llZCwgZWR1Y2F0aW9uKQpXVjVfZGF0YQpgYGAKCiMgUmVhZCBjb3VudHJ5bmFtZXMgZGF0YSBmcm9tIHRoZSBDU1YgZmlsZSAodG8gZGVjb2RlIHRoZSBkYXRhc2V0IDUpCmBgYHtyfQpjb3VudHJ5bmFtZXMgPC0gcmVhZC5jc3YoIi9Vc2Vycy9sYXVyYWJhenppZ2hlci9Eb2N1bWVudHMvR2l0SHViL3Jpc2tfd3ZzL2RhdGEvZGF0YXNldC9XVjZfZGF0YXNldF93YXZlXzVfNi9jb3VudHJ5bmFtZXMudHh0IiwgaGVhZGVyID0gRkFMU0UsIGFzLmlzID0gVFJVRSkKY29sbmFtZXMoY291bnRyeW5hbWVzKSA8LSBjKCJjb2RlIiwgIm5hbWUiKQoKIyBBc3N1bWluZyBXVjVfZGF0YSBoYXMgYSBjb2x1bW4gbmFtZWQgY291bnRyeV9jb2RlCldWNV9kYXRhJGNvdW50cnkgPC0gY291bnRyeW5hbWVzJG5hbWVbbWF0Y2goV1Y1X2RhdGEkY291bnRyeV9jb2RlLCBjb3VudHJ5bmFtZXMkY29kZSldCgojIENoZWNrIHRoZSBmcmVxdWVuY3kgb2YgZWFjaCBjb3VudHJ5IGluIHRoZSBuZXcgY29sdW1uCnRhYmxlKFdWNV9kYXRhJGNvdW50cnkpCgojIERpc3BsYXkgdGhlIHVwZGF0ZWQgV1Y1X2RhdGEKcHJpbnQoV1Y1X2RhdGEpCmBgYAoKI1JlYWQgRGF0YXNldCAoV2F2ZSA2KQpgYGB7cn0KV1Y2X2RhdGEgPC0gbG9hZCgiL1VzZXJzL2xhdXJhYmF6emlnaGVyL0RvY3VtZW50cy9HaXRIdWIvcmlza193dnMvZGF0YS9kYXRhc2V0L1dWNl9kYXRhc2V0X3dhdmVfNV82L1dWNl9EYXRhX1JfdjIwMjAxMTE3LnJkYXRhIikgCldWNl9kYXRhIDwtIFdWNl9EYXRhX1JfdjIwMjAxMTE3IApwcmludChXVjZfZGF0YSkKYGBgCgoKI3JlbmFtZSB0aGUgdmFyaWFibGVzCmBgYHtyfQpXVjZfZGF0YSA8LSBXVjZfZGF0YSAlPiUKICByZW5hbWUod2F2ZSA9IFYxLCBnZW5kZXIgPSBWMjQwLCBhZ2UgPSBWMjQyLGNvdW50cnlfY29kZSA9IFYyLCByaXNrdGFraW5nID0gVjc2LCBjaGlsZHJlbiA9IFY1OCwgbWFycmllZCA9IFY1NywgZW1wbG95ZWQgPSBWMjI5LCBlZHVjYXRpb24gPSBWMjQ4KQoKI3NlbGVjdCBvbmx5IHRoZSB2YXJpYWJsZXMgb2YgaW50ZXJlc3QKV1Y2X2RhdGEgPC0gV1Y2X2RhdGEgJT4lCiAgZHBseXI6OnNlbGVjdCh3YXZlLCBnZW5kZXIsIGFnZSwgY291bnRyeV9jb2RlLHJpc2t0YWtpbmcsIGNoaWxkcmVuLCBtYXJyaWVkLCBlbXBsb3llZCwgZWR1Y2F0aW9uKQpXVjZfZGF0YQpgYGAKCiMgQWRkIHRoZSBjb3VudHJ5bmFtZXMKYGBge3J9CmNvdW50cnluYW1lcyA9IHJlYWQuY3N2KCIvVXNlcnMvbGF1cmFiYXp6aWdoZXIvRG9jdW1lbnRzL0dpdEh1Yi9yaXNrX3d2cy9kYXRhL2RhdGFzZXQvV1Y2X2RhdGFzZXRfd2F2ZV81XzYvY291bnRyeW5hbWVzLnR4dCIsIGhlYWRlcj1GQUxTRSxhcy5pcz1UUlVFKQpjb2xuYW1lcyhjb3VudHJ5bmFtZXMpID0gYygiY29kZSIsICJuYW1lIikKV1Y2X2RhdGEkY291bnRyeSA9IGNvdW50cnluYW1lcyRuYW1lIFttYXRjaChXVjZfZGF0YSRjb3VudHJ5X2NvZGUsIGNvdW50cnluYW1lcyRjb2RlKV0KdGFibGUoV1Y2X2RhdGEkY291bnRyeSkKV1Y2X2RhdGEKYGBgCgojIEJpbmQgZGF0YQpgYGB7cn0KV1Y1X2RhdGEKV1Y2X2RhdGEKV1ZTX2RhdGEgPSByYmluZChXVjVfZGF0YSwgV1Y2X2RhdGEpCldWU19kYXRhCgp1bmlxdWUoV1ZTX2RhdGEkYWdlKQpyYW5nZShXVlNfZGF0YSRhZ2UpCmBgYAoKIyBSZW1vdmUgbWlzc2luZyBkYXRhCmBgYHtyfQpXVlNfZGF0YSA9IHN1YnNldChXVlNfZGF0YSwgcmlza3Rha2luZyA+IDAgJiBnZW5kZXIgPiAwICYgYWdlID4wICYgZWR1Y2F0aW9uID4gMCAmIGVtcGxveWVkID4gMCAmIG1hcnJpZWQgPiAwICYgY2hpbGRyZW4gPj0gMCkKCldWU19kYXRhIDwtIG5hLm9taXQoV1ZTX2RhdGEpCgojIFVzZSB0aGUgbXV0YXRlIGZ1bmN0aW9uIHRvIGNoYW5nZSB0aGUgY291bnRyeSBuYW1lCldWU19kYXRhIDwtIFdWU19kYXRhICU+JQogIG11dGF0ZShjb3VudHJ5ID0gaWZlbHNlKGNvdW50cnkgPT0gIkdyZWF0IEJyaXRhaW4iLCAiVW5pdGVkIEtpbmdkb20iLCBjb3VudHJ5KSkKYGBgCgojIFRyYW5zZnJvbSByaXNrIGl0ZW0gc3VjaCB0aGF0IGhpZ2ggdmFsdWVzIHJlcHJlc2VudCBtb3JlIHJpc2sgdGFraW5nCmBgYHtyfQpXVlNfZGF0YSRyaXNrdGFraW5nID0gNiAtIFdWU19kYXRhJHJpc2t0YWtpbmcgKyAxCgojIFRyYW5zZm9ybSByaXNrIHZhcmlhYmxlIGludG8gVC1zY29yZSAobWVhbiA9IDUwLCBzZCA9IDEwKQpXVlNfZGF0YSRUX3Njb3JlX3Jpc2t0YWtpbmcgPSAxMCpzY2FsZShXVlNfZGF0YSRyaXNrdGFraW5nLCBjZW50ZXI9VFJVRSxzY2FsZT1UUlVFKSs1MAoKV1ZTX2RhdGEKCiNUcmFuc2Zvcm0gcmlzayB2YXJpYWJsZSBpbnRvIFogc2NvcmUgCgojIEFzc3VtaW5nIFQtc2NvcmVzIGhhdmUgYSBtZWFuIG9mIDUwIGFuZCBhIHN0YW5kYXJkIGRldmlhdGlvbiBvZiAxMApXVlNfZGF0YSRaX3Njb3JlX3Jpc2t0YWtpbmcgPSAoV1ZTX2RhdGEkVF9zY29yZV9yaXNrdGFraW5nIC0gNTApIC8gMTAKCiMgUHJpbnQgdGhlIHJlc3VsdGluZyBkYXRhIGZyYW1lCnByaW50KFdWU19kYXRhKQoKV1ZTX2RhdGEgPC0gV1ZTX2RhdGEgJT4lCiAgZ3JvdXBfYnkoY291bnRyeSkgJT4lCiAgbXV0YXRlKHpfc2NvcmVfYWdlID0gc2NhbGUoYWdlKSkKV1ZTX2RhdGEKYGBgCiAgCiMgRGljaG90b20gdmFyaWFibGVzCmBgYHtyfQpXVlNfZGF0YSRnZW5kZXIgPSBpZmVsc2UoV1ZTX2RhdGEkZ2VuZGVyID09IDEsIDAsIDEpICMgc2V4OiBtYWxlIHZzLiBmZW1hbGUKV1ZTX2RhdGEkY2hpbGRyZW4gPSBpZmVsc2UoV1ZTX2RhdGEkY2hpbGRyZW4gPT0gMCwgMCwgMSkgIyBjaGlsZHJlbjogbm8gdnMuIHllcwpXVlNfZGF0YSRtYXJyaWVkID0gaWZlbHNlKFdWU19kYXRhJG1hcnJpZWQgPT0gMSwgMSwgMCkgIyBtYXJyaWVkOiB5ZXMgdnMuIG5vCldWU19kYXRhJGVtcGxveWVkID0gaWZlbHNlKFdWU19kYXRhJGVtcGxveWVkIDwgNCwgMSwgMCkgIyBlbXBsb3llZDogeWVzIHZzLiBubwpXVlNfZGF0YSRlZHVjYXRpb24gPSBpZmVsc2UoV1ZTX2RhdGEkZWR1Y2F0aW9uIDwgNCwgMCwgMSkgIyBlZHVjYXRpb246IG5vIHByaW1hcnkgdnMuIHByaW1hcnkrIAoKCmhhcmRzaGlwIDwtIGhhcmRzaGlwX2NvbXBsZXRlICU+JQogIGRwbHlyOjpzZWxlY3QobGFiZWwsIGNvZGUsIGhhcmRzaGlwX2luZGV4KQpoYXJkc2hpcApgYGAKYGBge3J9CmNvbG5hbWVzKFdWU19kYXRhKQpjb2xuYW1lcyhoYXJkc2hpcCkKYGBgCgojIEFkZCBoYXJkc2hpcCB0byBXVlNfbWl4ZWRfbW9kZWwKYGBge3J9CldWU19taXhlZF9tb2RlbCA8LSBsZWZ0X2pvaW4oV1ZTX2RhdGEsIGhhcmRzaGlwLCBieSA9IGMoImNvdW50cnkiID0gImNvZGUiKSkKV1ZTX21peGVkX21vZGVsCmhlYWQoV1ZTX21peGVkX21vZGVsKQpgYGAKCiMgTWl4ZWQgTW9kZWxzCmBgYHtyfQojIGludGVyY2VwdCBvbmx5IG1vZGVsCm1vZGVsMCA9IGxtZXIoWl9zY29yZV9yaXNrdGFraW5nIH4gMSArICgxfGNvdW50cnkpLGRhdGEgPSBXVlNfbWl4ZWRfbW9kZWwpCnN1bW1hcnlfbW9kZWwwPXN1bW1hcnkobW9kZWwwKQpzdW1tYXJ5X21vZGVsMApgYGAKYGBge3J9CmhlYWQoV1ZTX21peGVkX21vZGVsKQpgYGAKCgojIGFnZSwgc2V4IApgYGB7cn0KbW9kZWwxIDwtIGxtZXIocmlza3Rha2luZyB+IDEgKyBzY2FsZShhZ2UpICsgZmFjdG9yKGdlbmRlcikgKyAoMSArIHNjYWxlKGFnZSkgKyBmYWN0b3IoZ2VuZGVyKSB8IGNvdW50cnkpLCAKICAgICAgICAgICAgICAgZGF0YSA9IFdWU19kYXRhLCAKICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2wgPSBsbWVyQ29udHJvbChvcHRpbWl6ZXIgPSAiYm9ieXFhIikpCnN1bW1hcnlfbW9kZWwxPXN1bW1hcnkobW9kZWwxKQpwcmludChzdW1tYXJ5X21vZGVsMSkgIyBLb2VmZml6aWVudGVuw7xiZXJzaWNodCBkZXMgTW9kZWxscyBhbnplaWdlbgpgYGAKCiNtb2RlbCAyCmBgYHtyfQptb2RlbDIgPSBsbWVyKHJpc2t0YWtpbmcgfiAxK3NjYWxlKGFnZSkrZmFjdG9yKGdlbmRlcikgKyBmYWN0b3IoY2hpbGRyZW4pICsgZmFjdG9yKG1hcnJpZWQpICsgZmFjdG9yKGVtcGxveWVkKSArIGZhY3RvcihlZHVjYXRpb24pKyAoMStzY2FsZShhZ2UpK2ZhY3RvcihnZW5kZXIpKyBmYWN0b3IoY2hpbGRyZW4pICsgZmFjdG9yKG1hcnJpZWQpICsgZmFjdG9yKGVtcGxveWVkKSArIGZhY3RvcihlZHVjYXRpb24pfGNvdW50cnkpLGRhdGEgPSBXVlNfZGF0YSxjb250cm9sPWxtZXJDb250cm9sKG9wdEN0cmw9bGlzdChtYXhmdW49MzAwMDApLG9wdGltaXplcj0iYm9ieXFhIikpCnN1bW1hcnlfbW9kZWwyPXN1bW1hcnkobW9kZWwyKQoKcHJpbnQoc3VtbWFyeV9tb2RlbDIpIApgYGAKCiMgTW9kZWwzCmBgYHtyfQptb2RlbDMgPC0gbG1lcihyaXNrdGFraW5nIH4gMStzY2FsZShhZ2UpKmhhcmRzaGlwK2ZhY3RvcihnZW5kZXIpKmhhcmRzaGlwICsgZmFjdG9yKGNoaWxkcmVuKSArIGZhY3RvcihtYXJyaWVkKSArIGZhY3RvcihlbXBsb3llZCkgKyBmYWN0b3IoZWR1Y2F0aW9uKSsgKDErc2NhbGUoYWdlKStmYWN0b3IoZ2VuZGVyKSsgZmFjdG9yKGNoaWxkcmVuKSArIGZhY3RvcihtYXJyaWVkKSArIGZhY3RvcihlbXBsb3llZCkgKyBmYWN0b3IoZWR1Y2F0aW9uKXxjb3VudHJ5KSxkYXRhID0gV1ZTX2RhdGEsY29udHJvbD1sbWVyQ29udHJvbChvcHRDdHJsPWxpc3QobWF4ZnVuPTMwMDAwKSxvcHRpbWl6ZXI9ImJvYnlxYSIpLFJFTUwgPSBGQUxTRSkKc3VtbWFyeV9tb2RlbDM9c3VtbWFyeShtb2RlbDMpCgpwcmludChzdW1tYXJ5X21vZGVsMykKYGBgCgojIEFOT1ZBCmBgYHtyfQphbm92YShtb2RlbDAsbW9kZWwxKQphbm92YShtb2RlbDEsbW9kZWxfMikKYW5vdmEobW9kZWxfMixtb2RlbF8zKSAKYGBgCgpgYGB7cn0KY29lZnNhbGxtb2RlbHM9cmJpbmQoc3VtbWFyeV9tb2RlbDEkY29lZmZpY2llbnRzLApzdW1tYXJ5X21vZGVsXzIkY29lZmZpY2llbnRzLApzdW1tYXJ5X21vZGVsXzMkY29lZmZpY2llbnRzW2MoMToyLDQ6OCwzLDk6MTApLF0pCgp3cml0ZS5jc3YoY29lZnNhbGxtb2RlbHMsImNvZWZzYWxsbW9kZWxzLmNzdiIpCmBgYAoKCmBgYHtyfQojIFJlYWQgdGhlIENTViBmaWxlIGludG8gYSBkYXRhIGZyYW1lCmdiZF9tZW50YWxoZWFsdGggPC0gcmVhZF9leGNlbCgiL1VzZXJzL2NyaXN0aW5hY2FuZGlkby9Eb2N1bWVudHMvR2l0aHViL3Jpc2tfd3ZzL0dCRF9tZW50YWxoZWFsdGgueGxzeCIpCgpnYmRfbWVudGFsaGVhbHRoCgojc2VsZWN0IG9ubHkgdGhlIHZhcmlhYmxlcyBvZiBpbnRlcmVzdApnYmRfbWVudGFsaGVhbHRoIDwtIGdiZF9tZW50YWxoZWFsdGggJT4lCiAgZHBseXI6OnNlbGVjdChjb3VudHJ5LCBnZW5kZXIsIGFnZSwgY2F1c2UsIHZhbCwgTWVhc3VyZSkKZ2JkX21lbnRhbGhlYWx0aAoKCmxpYnJhcnkoZHBseXIpCgojIEdyb3VwIGRhdGEgYnkgY291bnRyeSBhbmQgYWdlIGdyb3VwLCBhbmQgY2FsY3VsYXRlIHN1bW1hcnkgc3RhdGlzdGljcwpzdW1tYXJ5X2J5X2NvdW50cnlfYWdlIDwtIGdiZF9tZW50YWxoZWFsdGggJT4lCiAgZ3JvdXBfYnkoY291bnRyeSwgYWdlKSAlPiUKICBzdW1tYXJpc2UoCiAgICBtZWFuX0RBTFlzID0gbWVhbih2YWwpKSAgIyBDYWxjdWxhdGUgbWVhbiBvZiBEQUxZcwoKbGlicmFyeShkcGx5cikKCiMgQXNzdW1pbmcgJ3N1bW1hcnlfYnlfY291bnRyeV9hZ2UnIGNvbnRhaW5zIHlvdXIgc3VtbWFyaXplZCBkYXRhc2V0Cm1lYW5fYnlfY291bnRyeSA8LSBzdW1tYXJ5X2J5X2NvdW50cnlfYWdlICU+JQogIGdyb3VwX2J5KGNvdW50cnkpICU+JQogIHN1bW1hcmlzZShtZWFuX0RBTFlzID0gbWVhbihtZWFuX0RBTFlzKSkKCiMgVmlldyB0aGUgcmVzdWx0aW5nIG1lYW4gYnkgY291bnRyeQpwcmludChtZWFuX2J5X2NvdW50cnkpCgojbG9nIHRyYW5zZm9ybQptZWFuX2J5X2NvdW50cnkkbWVhbl9EQUxZcz1sb2cobWVhbl9ieV9jb3VudHJ5JG1lYW5fREFMWXMpCiAKbWVhbl9ieV9jb3VudHJ5IAoKI1JldmVyc2UgY29kaWVydW5nIAptZWFuX2J5X2NvdW50cnkkbWVhbl9EQUxZcz1zY2FsZShtZWFuX2J5X2NvdW50cnkkbWVhbl9EQUxZcykKCm1lYW5fYnlfY291bnRyeQoKI3JlbmFtZSBtZWFuX0RBTFlTCm1lbnRhbF9oZWFsdGhfaW5kZXggPC0gbWVhbl9ieV9jb3VudHJ5ICU+JQogIHJlbmFtZSgnbWVudGFsX2hlYWx0aCcgPSBtZWFuX0RBTFlzKQptZW50YWxfaGVhbHRoX2luZGV4CgpgYGAKYGBge3J9CmxpYnJhcnkoZHBseXIpCgojIyMjIyMjQW54aWV0eSBkaXNvcmRlcnMjIyMjIyMjIyMKI0ZpbHRlciBkYXRhIGZvciBhIHNwZWNpZmljIG1lbnRhbCBkaXNvcmRlciAoZS5nLiwgQW54aWV0eSBEaXNvcmRlcnMpCmFueGlldHlfZGlzb3JkZXJzIDwtIGdiZF9tZW50YWxoZWFsdGggJT4lCiAgZmlsdGVyKGNhdXNlID09ICJBbnhpZXR5IGRpc29yZGVycyIpICAjIENoYW5nZSAiQW54aWV0eSBEaXNvcmRlcnMiIHRvIHRoZSBkZXNpcmVkIGRpc29yZGVyCgojIENhbGN1bGF0ZSB0aGUgbWVhbiBvZiAndmFsJyAoRGlzYWJpbGl0eS1BZGp1c3RlZCBMaWZlIFllYXJzKSBhY3Jvc3MgbG9jYXRpb25zIGFuZCBhZ2VzCm1lYW5fREFMWXMgPC0gbWVhbihhbnhpZXR5X2Rpc29yZGVycyR2YWwpCgojIE9wdGlvbmFsbHksIGlmIHlvdSB3YW50IHRvIGNhbGN1bGF0ZSBtZWFuIGJ5IGNvdW50cnk6CmFueGlldHlfZGlzb3JkZXJzIDwtIGFueGlldHlfZGlzb3JkZXJzICU+JQogIGdyb3VwX2J5KGNvdW50cnkpICU+JQogIHN1bW1hcmlzZShtZWFuX0FueGlldHlfZGlzb3JkZXJzID0gbWVhbih2YWwpKQoKYW54aWV0eV9kaXNvcmRlcnMKCiNsb2cgdHJhbnNmb3JtCmFueGlldHlfZGlzb3JkZXJzJG1lYW5fQW54aWV0eV9kaXNvcmRlcnM9bG9nKGFueGlldHlfZGlzb3JkZXJzJG1lYW5fQW54aWV0eV9kaXNvcmRlcnMpCiAKYW54aWV0eV9kaXNvcmRlcnMKCiNSZXZlcnNlIGNvZGllcnVuZyAKYW54aWV0eV9kaXNvcmRlcnMkbWVhbl9BbnhpZXR5X2Rpc29yZGVycz1zY2FsZShhbnhpZXR5X2Rpc29yZGVycyRtZWFuX0FueGlldHlfZGlzb3JkZXJzKQphbnhpZXR5X2Rpc29yZGVycwptZW50YWxfaGVhbHRoX2luZGV4CgpgYGAKYGBge3J9CmdiZF9tZW50YWxoZWFsdGgKCiMgQXNzdW1pbmcgZ2JkX21lbnRhbGhlYWx0aCBpcyB5b3VyIGRhdGEgZnJhbWUgY29udGFpbmluZyB0aGUgJ2NhdXNlJyBjb2x1bW4KCiMgR2V0IHVuaXF1ZSB2YWx1ZXMgb2YgJ2NhdXNlJyBjb2x1bW4KdW5pcXVlX2NhdXNlcyA8LSB1bmlxdWUoZ2JkX21lbnRhbGhlYWx0aCRjYXVzZSkKCiMgQ3JlYXRlIGEgZGF0YSBmcmFtZSB3aXRoIHVuaXF1ZSBjYXVzZXMKY2F1c2VfdGFibGUgPC0gZGF0YS5mcmFtZShDYXVzZSA9IHVuaXF1ZV9jYXVzZXMpCgojIFByaW50IHRoZSBjYXVzZSB0YWJsZQpwcmludChjYXVzZV90YWJsZSkKCgpgYGAKYGBge3J9CiMjIyMjIyNCdWxpbWlhIG5lcnZvc2EjIyMjIyMjIwpsaWJyYXJ5KGRwbHlyKQoKIyBGaWx0ZXIgdGhlIGRhdGEgZm9yICdCdWxpbWlhIE5lcnZvc2EnCmJ1bGltaWFfbmVydm9zYSA8LSBnYmRfbWVudGFsaGVhbHRoICU+JQogIGZpbHRlcihjYXVzZSA9PSAiQnVsaW1pYSBuZXJ2b3NhIikKCiMgQ2FsY3VsYXRlIHRoZSBtZWFuIG9mICd2YWwnIChEQUxZcykgYWNyb3NzIGFsbCBsb2NhdGlvbnMKbWVhbl9EQUxZcyA8LSBtZWFuKGJ1bGltaWFfbmVydm9zYSR2YWwpCgojIE9wdGlvbmFsbHksIGNhbGN1bGF0ZSBtZWFuIGJ5IGNvdW50cnkKYnVsaW1pYV9uZXJ2b3NhIDwtIGJ1bGltaWFfbmVydm9zYSAlPiUKICBncm91cF9ieShjb3VudHJ5KSAlPiUKICBzdW1tYXJpc2UobWVhbl9idWxpbWlhX25lcnZvc2EgPSBtZWFuKHZhbCkpCgojIExvZyB0cmFuc2Zvcm0gdGhlIG1lYW5fYnVsaW1pYV9uZXJ2b3NhIGNvbHVtbgpidWxpbWlhX25lcnZvc2EkbWVhbl9idWxpbWlhX25lcnZvc2EgPC0gbG9nKGJ1bGltaWFfbmVydm9zYSRtZWFuX2J1bGltaWFfbmVydm9zYSkKCiMgU2NhbGUgdGhlIG1lYW5fYnVsaW1pYV9uZXJ2b3NhIGNvbHVtbiAoaWYgbmVlZGVkKQpidWxpbWlhX25lcnZvc2EkbWVhbl9idWxpbWlhX25lcnZvc2EgPC0gc2NhbGUoYnVsaW1pYV9uZXJ2b3NhJG1lYW5fYnVsaW1pYV9uZXJ2b3NhKQoKIyBQcmludCB0aGUgcmVzdWx0aW5nIGRhdGEgZnJhbWUKcHJpbnQoYnVsaW1pYV9uZXJ2b3NhKQpwcmludChhbnhpZXR5X2Rpc29yZGVycykKCmdiZF9tZW50YWxoZWFsdGgKCmBgYApgYGB7cn0KIyMjIyNBdHRlbnRpb24tZGVmaWNpdC9oeXBlcmFjdGl2aXR5IGRpc29yZGVyCmxpYnJhcnkoZHBseXIpCgoKQURIRCA8LSBnYmRfbWVudGFsaGVhbHRoICU+JQogIGZpbHRlcihjYXVzZSA9PSAiQXR0ZW50aW9uLWRlZmljaXQvaHlwZXJhY3Rpdml0eSBkaXNvcmRlciIpCgojIENhbGN1bGF0ZSB0aGUgbWVhbiBvZiAndmFsJyAoREFMWXMpIGFjcm9zcyBhbGwgbG9jYXRpb25zCm1lYW5fREFMWXMgPC0gbWVhbihBREhEJHZhbCkKCiMgT3B0aW9uYWxseSwgY2FsY3VsYXRlIG1lYW4gYnkgY291bnRyeQpBREhEIDwtIEFESEQgJT4lCiAgZ3JvdXBfYnkoY291bnRyeSkgJT4lCiAgc3VtbWFyaXNlKG1lYW5fQURIRCA9IG1lYW4odmFsKSkKCiMgTG9nIHRyYW5zZm9ybSB0aGUgbWVhbl9idWxpbWlhX25lcnZvc2EgY29sdW1uCkFESEQkbWVhbl9BREhEIDwtIGxvZyhBREhEJG1lYW5fQURIRCkKCiMgU2NhbGUgdGhlIG1lYW5fYnVsaW1pYV9uZXJ2b3NhIGNvbHVtbiAoaWYgbmVlZGVkKQpBREhEJG1lYW5fQURIRCA8LSBzY2FsZShBREhEJG1lYW5fQURIRCkKCiMgUHJpbnQgdGhlIHJlc3VsdGluZyBkYXRhIGZyYW1lCnByaW50KEFESEQpCgpgYGAKYGBge3J9CiMjIyMjIyMjI0lkaW9wYXRoaWMgZGV2ZWxvcG1lbnQgaW50ZWxsZWN0dWFsIGFiaWxpdHkgCmxpYnJhcnkoZHBseXIpCgoKSWRpb3BhdGhpY19kZXZlbG9wbWVudGFsX2ludGVsbGVjdHVhbF9kaXNhYmlsaXR5IDwtIGdiZF9tZW50YWxoZWFsdGggJT4lCiAgZmlsdGVyKGNhdXNlID09ICJJZGlvcGF0aGljIGRldmVsb3BtZW50YWwgaW50ZWxsZWN0dWFsIGRpc2FiaWxpdHkiKQoKIyBDYWxjdWxhdGUgdGhlIG1lYW4gb2YgJ3ZhbCcgKERBTFlzKSBhY3Jvc3MgYWxsIGxvY2F0aW9ucwptZWFuX0RBTFlzIDwtIG1lYW4oSWRpb3BhdGhpY19kZXZlbG9wbWVudGFsX2ludGVsbGVjdHVhbF9kaXNhYmlsaXR5JHZhbCkKCiMgT3B0aW9uYWxseSwgY2FsY3VsYXRlIG1lYW4gYnkgY291bnRyeQpJZGlvcGF0aGljX2RldmVsb3BtZW50YWxfaW50ZWxsZWN0dWFsX2Rpc2FiaWxpdHkgPC0gSWRpb3BhdGhpY19kZXZlbG9wbWVudGFsX2ludGVsbGVjdHVhbF9kaXNhYmlsaXR5ICU+JQogIGdyb3VwX2J5KGNvdW50cnkpICU+JQogIHN1bW1hcmlzZShtZWFuX0lkaW9wYXRoaWNfZGV2ZWxvcG1lbnRhbF9pbnRlbGxlY3R1YWxfZGlzYWJpbGl0eSA9IG1lYW4odmFsKSkKCiMgTG9nIHRyYW5zZm9ybSB0aGUgbWVhbl9idWxpbWlhX25lcnZvc2EgY29sdW1uCklkaW9wYXRoaWNfZGV2ZWxvcG1lbnRhbF9pbnRlbGxlY3R1YWxfZGlzYWJpbGl0eSRtZWFuX0lkaW9wYXRoaWNfZGV2ZWxvcG1lbnRhbF9pbnRlbGxlY3R1YWxfZGlzYWJpbGl0eSA8LSBsb2coSWRpb3BhdGhpY19kZXZlbG9wbWVudGFsX2ludGVsbGVjdHVhbF9kaXNhYmlsaXR5JG1lYW5fSWRpb3BhdGhpY19kZXZlbG9wbWVudGFsX2ludGVsbGVjdHVhbF9kaXNhYmlsaXR5KQoKIyBTY2FsZSB0aGUgbWVhbl9idWxpbWlhX25lcnZvc2EgY29sdW1uIChpZiBuZWVkZWQpCklkaW9wYXRoaWNfZGV2ZWxvcG1lbnRhbF9pbnRlbGxlY3R1YWxfZGlzYWJpbGl0eSRtZWFuX0lkaW9wYXRoaWNfZGV2ZWxvcG1lbnRhbF9pbnRlbGxlY3R1YWxfZGlzYWJpbGl0eSA8LSBzY2FsZShJZGlvcGF0aGljX2RldmVsb3BtZW50YWxfaW50ZWxsZWN0dWFsX2Rpc2FiaWxpdHkkbWVhbl9JZGlvcGF0aGljX2RldmVsb3BtZW50YWxfaW50ZWxsZWN0dWFsX2Rpc2FiaWxpdHkpCgojIFByaW50IHRoZSByZXN1bHRpbmcgZGF0YSBmcmFtZQpwcmludChJZGlvcGF0aGljX2RldmVsb3BtZW50YWxfaW50ZWxsZWN0dWFsX2Rpc2FiaWxpdHkpCmBgYApgYGB7cn0KIyMjIyMjQW5vcmV4aWEgTmVydm9zYQoKYW5vcmV4aWFfbmVydm9zYSA8LSBnYmRfbWVudGFsaGVhbHRoICU+JQogIGZpbHRlcihjYXVzZSA9PSAiQW5vcmV4aWEgbmVydm9zYSIpCgojIENhbGN1bGF0ZSB0aGUgbWVhbiBvZiAndmFsJyAoREFMWXMpIGFjcm9zcyBhbGwgbG9jYXRpb25zCm1lYW5fREFMWXMgPC0gbWVhbihhbm9yZXhpYV9uZXJ2b3NhJHZhbCkKCiMgT3B0aW9uYWxseSwgY2FsY3VsYXRlIG1lYW4gYnkgY291bnRyeQphbm9yZXhpYV9uZXJ2b3NhIDwtIGFub3JleGlhX25lcnZvc2EgJT4lCiAgZ3JvdXBfYnkoY291bnRyeSkgJT4lCiAgc3VtbWFyaXNlKG1lYW5fYW5vcmV4aWFfbmVydm9zYSA9IG1lYW4odmFsKSkKCiMgTG9nIHRyYW5zZm9ybSB0aGUgbWVhbl9idWxpbWlhX25lcnZvc2EgY29sdW1uCmFub3JleGlhX25lcnZvc2EkbWVhbl9hbm9yZXhpYV9uZXJ2b3NhIDwtIGxvZyhhbm9yZXhpYV9uZXJ2b3NhJG1lYW5fYW5vcmV4aWFfbmVydm9zYSkKCiMgU2NhbGUgdGhlIG1lYW5fYnVsaW1pYV9uZXJ2b3NhIGNvbHVtbiAoaWYgbmVlZGVkKQphbm9yZXhpYV9uZXJ2b3NhJG1lYW5fYW5vcmV4aWFfbmVydm9zYSA8LSBzY2FsZShhbm9yZXhpYV9uZXJ2b3NhJG1lYW5fYW5vcmV4aWFfbmVydm9zYSkKCiMgUHJpbnQgdGhlIHJlc3VsdGluZyBkYXRhIGZyYW1lCnByaW50KGFub3JleGlhX25lcnZvc2EpCmBgYApgYGB7cn0KIyMjIyNEZXByZXNzaXZlIGRpc29yZGVycyMjIyMjIyMKCmRlcHJlc3NpdmVfZGlzb3JkZXJzIDwtIGdiZF9tZW50YWxoZWFsdGggJT4lCiAgZmlsdGVyKGNhdXNlID09ICJEZXByZXNzaXZlIGRpc29yZGVycyIpCgojIENhbGN1bGF0ZSB0aGUgbWVhbiBvZiAndmFsJyAoREFMWXMpIGFjcm9zcyBhbGwgbG9jYXRpb25zCm1lYW5fREFMWXMgPC0gbWVhbihkZXByZXNzaXZlX2Rpc29yZGVycyR2YWwpCgojIE9wdGlvbmFsbHksIGNhbGN1bGF0ZSBtZWFuIGJ5IGNvdW50cnkKZGVwcmVzc2l2ZV9kaXNvcmRlcnMgPC0gZGVwcmVzc2l2ZV9kaXNvcmRlcnMgJT4lCiAgZ3JvdXBfYnkoY291bnRyeSkgJT4lCiAgc3VtbWFyaXNlKG1lYW5fZGVwcmVzc2l2ZV9kaXNvcmRlcnMgPSBtZWFuKHZhbCkpCgojIExvZyB0cmFuc2Zvcm0gdGhlIG1lYW5fYnVsaW1pYV9uZXJ2b3NhIGNvbHVtbgpkZXByZXNzaXZlX2Rpc29yZGVycyRtZWFuX2RlcHJlc3NpdmVfZGlzb3JkZXJzIDwtIGxvZyhkZXByZXNzaXZlX2Rpc29yZGVycyRtZWFuX2RlcHJlc3NpdmVfZGlzb3JkZXJzKQoKIyBTY2FsZSB0aGUgbWVhbl9idWxpbWlhX25lcnZvc2EgY29sdW1uIChpZiBuZWVkZWQpCmRlcHJlc3NpdmVfZGlzb3JkZXJzJG1lYW5fZGVwcmVzc2l2ZV9kaXNvcmRlcnMgPC0gc2NhbGUoZGVwcmVzc2l2ZV9kaXNvcmRlcnMkbWVhbl9kZXByZXNzaXZlX2Rpc29yZGVycykKCiMgUHJpbnQgdGhlIHJlc3VsdGluZyBkYXRhIGZyYW1lCnByaW50KGRlcHJlc3NpdmVfZGlzb3JkZXJzKQpgYGAKCmBgYHtyfQojIyMjIyMjQXV0aXNtdXMgc3BlY3RydW0gZGlzb3JkZXJzIyMjIyMjCgphdXRpc211c19zcGVjdHJ1bV9kaXNvcmRlcnMgPC0gZ2JkX21lbnRhbGhlYWx0aCAlPiUKICBmaWx0ZXIoY2F1c2UgPT0gIkF1dGlzbSBzcGVjdHJ1bSBkaXNvcmRlcnMiKQoKIyBDYWxjdWxhdGUgdGhlIG1lYW4gb2YgJ3ZhbCcgKERBTFlzKSBhY3Jvc3MgYWxsIGxvY2F0aW9ucwptZWFuX0RBTFlzIDwtIG1lYW4oYXV0aXNtdXNfc3BlY3RydW1fZGlzb3JkZXJzJHZhbCkKCiMgT3B0aW9uYWxseSwgY2FsY3VsYXRlIG1lYW4gYnkgY291bnRyeQphdXRpc211c19zcGVjdHJ1bV9kaXNvcmRlcnMgPC0gYXV0aXNtdXNfc3BlY3RydW1fZGlzb3JkZXJzICU+JQogIGdyb3VwX2J5KGNvdW50cnkpICU+JQogIHN1bW1hcmlzZShtZWFuX2F1dGlzbXVzX3NwZWN0cnVtX2Rpc29yZGVycyA9IG1lYW4odmFsKSkKCiMgTG9nIHRyYW5zZm9ybSB0aGUgbWVhbl9idWxpbWlhX25lcnZvc2EgY29sdW1uCmF1dGlzbXVzX3NwZWN0cnVtX2Rpc29yZGVycyRtZWFuX2F1dGlzbXVzX3NwZWN0cnVtX2Rpc29yZGVycyA8LSBsb2coYXV0aXNtdXNfc3BlY3RydW1fZGlzb3JkZXJzJG1lYW5fYXV0aXNtdXNfc3BlY3RydW1fZGlzb3JkZXJzKQoKIyBTY2FsZSB0aGUgbWVhbl9idWxpbWlhX25lcnZvc2EgY29sdW1uIChpZiBuZWVkZWQpCmF1dGlzbXVzX3NwZWN0cnVtX2Rpc29yZGVycyRtZWFuX2F1dGlzbXVzX3NwZWN0cnVtX2Rpc29yZGVycyA8LSBzY2FsZShhdXRpc211c19zcGVjdHJ1bV9kaXNvcmRlcnMkbWVhbl9hdXRpc211c19zcGVjdHJ1bV9kaXNvcmRlcnMpCgojIFByaW50IHRoZSByZXN1bHRpbmcgZGF0YSBmcmFtZQpwcmludChhdXRpc211c19zcGVjdHJ1bV9kaXNvcmRlcnMpCmBgYAoKYGBge3J9CiMjIyMjI1NjaGl6b3BocmVuaWEjIyMjIyMjCnNjaGl6b3BocmVuaWEgPC0gZ2JkX21lbnRhbGhlYWx0aCAlPiUKICBmaWx0ZXIoY2F1c2UgPT0gIlNjaGl6b3BocmVuaWEiKQoKIyBDYWxjdWxhdGUgdGhlIG1lYW4gb2YgJ3ZhbCcgKERBTFlzKSBhY3Jvc3MgYWxsIGxvY2F0aW9ucwptZWFuX0RBTFlzIDwtIG1lYW4oc2NoaXpvcGhyZW5pYSR2YWwpCgojIE9wdGlvbmFsbHksIGNhbGN1bGF0ZSBtZWFuIGJ5IGNvdW50cnkKc2NoaXpvcGhyZW5pYSA8LSBzY2hpem9waHJlbmlhICU+JQogIGdyb3VwX2J5KGNvdW50cnkpICU+JQogIHN1bW1hcmlzZShtZWFuX3NjaGl6b3BocmVuaWEgPSBtZWFuKHZhbCkpCgojIExvZyB0cmFuc2Zvcm0gdGhlIG1lYW5fYnVsaW1pYV9uZXJ2b3NhIGNvbHVtbgpzY2hpem9waHJlbmlhJG1lYW5fc2NoaXpvcGhyZW5pYSA8LSBsb2coc2NoaXpvcGhyZW5pYSRtZWFuX3NjaGl6b3BocmVuaWEpCgojIFNjYWxlIHRoZSBtZWFuX2J1bGltaWFfbmVydm9zYSBjb2x1bW4gKGlmIG5lZWRlZCkKc2NoaXpvcGhyZW5pYSRtZWFuX3NjaGl6b3BocmVuaWEgPC0gc2NhbGUoc2NoaXpvcGhyZW5pYSRtZWFuX3NjaGl6b3BocmVuaWEpCgojIFByaW50IHRoZSByZXN1bHRpbmcgZGF0YSBmcmFtZQpwcmludChzY2hpem9waHJlbmlhKQoKYGBgCgpgYGB7cn0KIyMjIyMjI0NvbmR1Y3QgZGlzb3JkZXJzIyMjIyMjIyMjCmNvbmR1Y3RfZGlzb3JkZXJzIDwtIGdiZF9tZW50YWxoZWFsdGggJT4lCiAgZmlsdGVyKGNhdXNlID09ICJDb25kdWN0IGRpc29yZGVyIikKCiMgQ2FsY3VsYXRlIHRoZSBtZWFuIG9mICd2YWwnIChEQUxZcykgYWNyb3NzIGFsbCBsb2NhdGlvbnMKbWVhbl9EQUxZcyA8LSBtZWFuKGNvbmR1Y3RfZGlzb3JkZXJzJHZhbCkKCiMgT3B0aW9uYWxseSwgY2FsY3VsYXRlIG1lYW4gYnkgY291bnRyeQpjb25kdWN0X2Rpc29yZGVycyA8LSBjb25kdWN0X2Rpc29yZGVycyAlPiUKICBncm91cF9ieShjb3VudHJ5KSAlPiUKICBzdW1tYXJpc2UobWVhbl9jb25kdWN0X2Rpc29yZGVycyA9IG1lYW4odmFsKSkKCiMgTG9nIHRyYW5zZm9ybSB0aGUgbWVhbl9idWxpbWlhX25lcnZvc2EgY29sdW1uCmNvbmR1Y3RfZGlzb3JkZXJzJG1lYW5fY29uZHVjdF9kaXNvcmRlcnMgPC0gbG9nKGNvbmR1Y3RfZGlzb3JkZXJzJG1lYW5fY29uZHVjdF9kaXNvcmRlcnMpCgojIFNjYWxlIHRoZSBtZWFuX2J1bGltaWFfbmVydm9zYSBjb2x1bW4gKGlmIG5lZWRlZCkKY29uZHVjdF9kaXNvcmRlcnMkbWVhbl9jb25kdWN0X2Rpc29yZGVycyA8LSBzY2FsZShjb25kdWN0X2Rpc29yZGVycyRtZWFuX2NvbmR1Y3RfZGlzb3JkZXJzKQoKIyBQcmludCB0aGUgcmVzdWx0aW5nIGRhdGEgZnJhbWUKcHJpbnQoY29uZHVjdF9kaXNvcmRlcnMpCgoKYGBgCgpgYGB7cn0KIyMjIyMjIyNFYXRpbmcgZGlzb3JkZXJzIyMjIyMjIyMjCmVhdGluZ19kaXNvcmRlcnMgPC0gZ2JkX21lbnRhbGhlYWx0aCAlPiUKICBmaWx0ZXIoY2F1c2UgPT0gIkVhdGluZyBkaXNvcmRlcnMiKQoKIyBDYWxjdWxhdGUgdGhlIG1lYW4gb2YgJ3ZhbCcgKERBTFlzKSBhY3Jvc3MgYWxsIGxvY2F0aW9ucwptZWFuX0RBTFlzIDwtIG1lYW4oZWF0aW5nX2Rpc29yZGVycyR2YWwpCgojIE9wdGlvbmFsbHksIGNhbGN1bGF0ZSBtZWFuIGJ5IGNvdW50cnkKZWF0aW5nX2Rpc29yZGVycyA8LSBlYXRpbmdfZGlzb3JkZXJzICU+JQogIGdyb3VwX2J5KGNvdW50cnkpICU+JQogIHN1bW1hcmlzZShtZWFuX2VhdGluZ19kaXNvcmRlcnMgPSBtZWFuKHZhbCkpCgojIExvZyB0cmFuc2Zvcm0gdGhlIG1lYW5fYnVsaW1pYV9uZXJ2b3NhIGNvbHVtbgplYXRpbmdfZGlzb3JkZXJzJG1lYW5fZWF0aW5nX2Rpc29yZGVycyA8LSBsb2coZWF0aW5nX2Rpc29yZGVycyRtZWFuX2VhdGluZ19kaXNvcmRlcnMpCgojIFNjYWxlIHRoZSBtZWFuX2J1bGltaWFfbmVydm9zYSBjb2x1bW4gKGlmIG5lZWRlZCkKZWF0aW5nX2Rpc29yZGVycyRtZWFuX2VhdGluZ19kaXNvcmRlcnMgPC0gc2NhbGUoZWF0aW5nX2Rpc29yZGVycyRtZWFuX2VhdGluZ19kaXNvcmRlcnMpCgojIFByaW50IHRoZSByZXN1bHRpbmcgZGF0YSBmcmFtZQpwcmludChlYXRpbmdfZGlzb3JkZXJzKQoKYGBgCmBgYHtyfQojIyMjIyMjI0JpcG9sYXIgZGlzb3JkZXIjIyMjIyMjIyMKYmlwb2xhcl9kaXNvcmRlciA8LSBnYmRfbWVudGFsaGVhbHRoICU+JQogIGZpbHRlcihjYXVzZSA9PSAiQmlwb2xhciBkaXNvcmRlciIpCgojIENhbGN1bGF0ZSB0aGUgbWVhbiBvZiAndmFsJyAoREFMWXMpIGFjcm9zcyBhbGwgbG9jYXRpb25zCm1lYW5fREFMWXMgPC0gbWVhbihiaXBvbGFyX2Rpc29yZGVyJHZhbCkKCiMgT3B0aW9uYWxseSwgY2FsY3VsYXRlIG1lYW4gYnkgY291bnRyeQpiaXBvbGFyX2Rpc29yZGVyIDwtIGJpcG9sYXJfZGlzb3JkZXIgJT4lCiAgZ3JvdXBfYnkoY291bnRyeSkgJT4lCiAgc3VtbWFyaXNlKG1lYW5fYmlwb2xhcl9kaXNvcmRlciA9IG1lYW4odmFsKSkKCiMgTG9nIHRyYW5zZm9ybSB0aGUgbWVhbl9idWxpbWlhX25lcnZvc2EgY29sdW1uCmJpcG9sYXJfZGlzb3JkZXIkbWVhbl9iaXBvbGFyX2Rpc29yZGVyIDwtIGxvZyhiaXBvbGFyX2Rpc29yZGVyJG1lYW5fYmlwb2xhcl9kaXNvcmRlcikKCiMgU2NhbGUgdGhlIG1lYW5fYnVsaW1pYV9uZXJ2b3NhIGNvbHVtbiAoaWYgbmVlZGVkKQpiaXBvbGFyX2Rpc29yZGVyJG1lYW5fYmlwb2xhcl9kaXNvcmRlciA8LSBzY2FsZShiaXBvbGFyX2Rpc29yZGVyJG1lYW5fYmlwb2xhcl9kaXNvcmRlcikKCiMgUHJpbnQgdGhlIHJlc3VsdGluZyBkYXRhIGZyYW1lCnByaW50KGJpcG9sYXJfZGlzb3JkZXIpCgpgYGAKYGBge3J9CnByaW50KGNhdXNlX3RhYmxlKQpgYGAKYGBge3J9CiMjIyMjIyMjU3Vic3RhbmNlIHVzZSBkaXNvcmRlcnMjIyMjIyMjIwoKc3Vic3RhbmNlX3VzZV9kaXNvcmRlcnMgPC0gZ2JkX21lbnRhbGhlYWx0aCAlPiUKICBmaWx0ZXIoY2F1c2UgPT0gIlN1YnN0YW5jZSB1c2UgZGlzb3JkZXJzIikKCiMgQ2FsY3VsYXRlIHRoZSBtZWFuIG9mICd2YWwnIChEQUxZcykgYWNyb3NzIGFsbCBsb2NhdGlvbnMKbWVhbl9EQUxZcyA8LSBtZWFuKHN1YnN0YW5jZV91c2VfZGlzb3JkZXJzJHZhbCkKCiMgT3B0aW9uYWxseSwgY2FsY3VsYXRlIG1lYW4gYnkgY291bnRyeQpzdWJzdGFuY2VfdXNlX2Rpc29yZGVycyA8LSBzdWJzdGFuY2VfdXNlX2Rpc29yZGVycyAlPiUKICBncm91cF9ieShjb3VudHJ5KSAlPiUKICBzdW1tYXJpc2UobWVhbl9zdWJzdGFuY2VfdXNlX2Rpc29yZGVycyA9IG1lYW4odmFsKSkKCiMgTG9nIHRyYW5zZm9ybSB0aGUgbWVhbl9idWxpbWlhX25lcnZvc2EgY29sdW1uCnN1YnN0YW5jZV91c2VfZGlzb3JkZXJzJG1lYW5fc3Vic3RhbmNlX3VzZV9kaXNvcmRlcnMgPC0gbG9nKHN1YnN0YW5jZV91c2VfZGlzb3JkZXJzJG1lYW5fc3Vic3RhbmNlX3VzZV9kaXNvcmRlcnMpCgojIFNjYWxlIHRoZSBtZWFuX2J1bGltaWFfbmVydm9zYSBjb2x1bW4gKGlmIG5lZWRlZCkKc3Vic3RhbmNlX3VzZV9kaXNvcmRlcnMkbWVhbl9zdWJzdGFuY2VfdXNlX2Rpc29yZGVycyA8LSBzY2FsZShzdWJzdGFuY2VfdXNlX2Rpc29yZGVycyRtZWFuX3N1YnN0YW5jZV91c2VfZGlzb3JkZXJzKQoKIyBQcmludCB0aGUgcmVzdWx0aW5nIGRhdGEgZnJhbWUKcHJpbnQoc3Vic3RhbmNlX3VzZV9kaXNvcmRlcnMpCgpgYGAKYGBge3J9CiMjIyNEcnVnIHVzZSBkaXNvcmRlcnMKCmRydWdfdXNlX2Rpc29yZGVycyA8LSBnYmRfbWVudGFsaGVhbHRoICU+JQogIGZpbHRlcihjYXVzZSA9PSAiRHJ1ZyB1c2UgZGlzb3JkZXJzIikKCiMgQ2FsY3VsYXRlIHRoZSBtZWFuIG9mICd2YWwnIChEQUxZcykgYWNyb3NzIGFsbCBsb2NhdGlvbnMKbWVhbl9EQUxZcyA8LSBtZWFuKGRydWdfdXNlX2Rpc29yZGVycyR2YWwpCgojIE9wdGlvbmFsbHksIGNhbGN1bGF0ZSBtZWFuIGJ5IGNvdW50cnkKZHJ1Z191c2VfZGlzb3JkZXJzIDwtIGRydWdfdXNlX2Rpc29yZGVycyAlPiUKICBncm91cF9ieShjb3VudHJ5KSAlPiUKICBzdW1tYXJpc2UobWVhbl9kcnVnX3VzZV9kaXNvcmRlcnMgPSBtZWFuKHZhbCkpCgojIExvZyB0cmFuc2Zvcm0gdGhlIG1lYW5fYnVsaW1pYV9uZXJ2b3NhIGNvbHVtbgpkcnVnX3VzZV9kaXNvcmRlcnMkbWVhbl9kcnVnX3VzZV9kaXNvcmRlcnMgPC0gbG9nKGRydWdfdXNlX2Rpc29yZGVycyRtZWFuX2RydWdfdXNlX2Rpc29yZGVycykKCiMgU2NhbGUgdGhlIG1lYW5fYnVsaW1pYV9uZXJ2b3NhIGNvbHVtbiAoaWYgbmVlZGVkKQpkcnVnX3VzZV9kaXNvcmRlcnMkbWVhbl9kcnVnX3VzZV9kaXNvcmRlcnMgPC0gc2NhbGUoZHJ1Z191c2VfZGlzb3JkZXJzJG1lYW5fZHJ1Z191c2VfZGlzb3JkZXJzKQoKIyBQcmludCB0aGUgcmVzdWx0aW5nIGRhdGEgZnJhbWUKcHJpbnQoZHJ1Z191c2VfZGlzb3JkZXJzKQoKCmBgYApgYGB7cn0KIyMjIyMjIyMjI0FsY29ob2wgdXNlIGRpc29yZGVycwphbGNvaG9sX3VzZV9kaXNvcmRlcnMgPC0gZ2JkX21lbnRhbGhlYWx0aCAlPiUKICBmaWx0ZXIoY2F1c2UgPT0gIkFsY29ob2wgdXNlIGRpc29yZGVycyIpCgojIENhbGN1bGF0ZSB0aGUgbWVhbiBvZiAndmFsJyAoREFMWXMpIGFjcm9zcyBhbGwgbG9jYXRpb25zCm1lYW5fREFMWXMgPC0gbWVhbihhbGNvaG9sX3VzZV9kaXNvcmRlcnMkdmFsKQoKIyBPcHRpb25hbGx5LCBjYWxjdWxhdGUgbWVhbiBieSBjb3VudHJ5CmFsY29ob2xfdXNlX2Rpc29yZGVycyA8LSBhbGNvaG9sX3VzZV9kaXNvcmRlcnMgJT4lCiAgZ3JvdXBfYnkoY291bnRyeSkgJT4lCiAgc3VtbWFyaXNlKG1lYW5fYWxjb2hvbF91c2VfZGlzb3JkZXJzID0gbWVhbih2YWwpKQoKIyBMb2cgdHJhbnNmb3JtIHRoZSBtZWFuX2J1bGltaWFfbmVydm9zYSBjb2x1bW4KYWxjb2hvbF91c2VfZGlzb3JkZXJzJG1lYW5fYWxjb2hvbF91c2VfZGlzb3JkZXJzIDwtIGxvZyhhbGNvaG9sX3VzZV9kaXNvcmRlcnMkbWVhbl9hbGNvaG9sX3VzZV9kaXNvcmRlcnMpCgojIFNjYWxlIHRoZSBtZWFuX2J1bGltaWFfbmVydm9zYSBjb2x1bW4gKGlmIG5lZWRlZCkKYWxjb2hvbF91c2VfZGlzb3JkZXJzJG1lYW5fYWxjb2hvbF91c2VfZGlzb3JkZXJzIDwtIHNjYWxlKGFsY29ob2xfdXNlX2Rpc29yZGVycyRtZWFuX2FsY29ob2xfdXNlX2Rpc29yZGVycykKCiMgUHJpbnQgdGhlIHJlc3VsdGluZyBkYXRhIGZyYW1lCnByaW50KGFsY29ob2xfdXNlX2Rpc29yZGVycykKCmBgYApgYGB7cn0KIyMjIyMjI01ham9yIGRlcHJlc3NpdmUgZGlzb3JkZXJzCm1ham9yX2RlcHJlc3NpdmVfZGlzb3JkZXIgPC0gZ2JkX21lbnRhbGhlYWx0aCAlPiUKICBmaWx0ZXIoY2F1c2UgPT0gIk1ham9yIGRlcHJlc3NpdmUgZGlzb3JkZXIiKQoKIyBDYWxjdWxhdGUgdGhlIG1lYW4gb2YgJ3ZhbCcgKERBTFlzKSBhY3Jvc3MgYWxsIGxvY2F0aW9ucwptZWFuX0RBTFlzIDwtIG1lYW4obWFqb3JfZGVwcmVzc2l2ZV9kaXNvcmRlciR2YWwpCgojIE9wdGlvbmFsbHksIGNhbGN1bGF0ZSBtZWFuIGJ5IGNvdW50cnkKbWFqb3JfZGVwcmVzc2l2ZV9kaXNvcmRlciA8LSBtYWpvcl9kZXByZXNzaXZlX2Rpc29yZGVyICU+JQogIGdyb3VwX2J5KGNvdW50cnkpICU+JQogIHN1bW1hcmlzZShtZWFuX21ham9yX2RlcHJlc3NpdmVfZGlzb3JkZXIgPSBtZWFuKHZhbCkpCgojIExvZyB0cmFuc2Zvcm0gdGhlIG1lYW5fYnVsaW1pYV9uZXJ2b3NhIGNvbHVtbgptYWpvcl9kZXByZXNzaXZlX2Rpc29yZGVyJG1lYW5fbWFqb3JfZGVwcmVzc2l2ZV9kaXNvcmRlciA8LSBsb2cobWFqb3JfZGVwcmVzc2l2ZV9kaXNvcmRlciRtZWFuX21ham9yX2RlcHJlc3NpdmVfZGlzb3JkZXIpCgojIFNjYWxlIHRoZSBtZWFuX2J1bGltaWFfbmVydm9zYSBjb2x1bW4gKGlmIG5lZWRlZCkKbWFqb3JfZGVwcmVzc2l2ZV9kaXNvcmRlciRtZWFuX21ham9yX2RlcHJlc3NpdmVfZGlzb3JkZXIgPC0gc2NhbGUobWFqb3JfZGVwcmVzc2l2ZV9kaXNvcmRlciRtZWFuX21ham9yX2RlcHJlc3NpdmVfZGlzb3JkZXIpCgojIFByaW50IHRoZSByZXN1bHRpbmcgZGF0YSBmcmFtZQpwcmludChtYWpvcl9kZXByZXNzaXZlX2Rpc29yZGVyKQoKYGBgCmBgYHtyfQojIyMjIyMjRHlzdGh5bWlhIyMjIyMjIyMKCmR5c3RoeW1pYSA8LSBnYmRfbWVudGFsaGVhbHRoICU+JQogIGZpbHRlcihjYXVzZSA9PSAiRHlzdGh5bWlhIikKCiMgQ2FsY3VsYXRlIHRoZSBtZWFuIG9mICd2YWwnIChEQUxZcykgYWNyb3NzIGFsbCBsb2NhdGlvbnMKbWVhbl9EQUxZcyA8LSBtZWFuKGR5c3RoeW1pYSR2YWwpCgojIE9wdGlvbmFsbHksIGNhbGN1bGF0ZSBtZWFuIGJ5IGNvdW50cnkKZHlzdGh5bWlhIDwtIGR5c3RoeW1pYSAlPiUKICBncm91cF9ieShjb3VudHJ5KSAlPiUKICBzdW1tYXJpc2UobWVhbl9keXN0aHltaWEgPSBtZWFuKHZhbCkpCgojIExvZyB0cmFuc2Zvcm0gdGhlIG1lYW5fYnVsaW1pYV9uZXJ2b3NhIGNvbHVtbgpkeXN0aHltaWEkbWVhbl9keXN0aHltaWEgPC0gbG9nKGR5c3RoeW1pYSRtZWFuX2R5c3RoeW1pYSkKCiMgU2NhbGUgdGhlIG1lYW5fYnVsaW1pYV9uZXJ2b3NhIGNvbHVtbiAoaWYgbmVlZGVkKQpkeXN0aHltaWEkbWVhbl9keXN0aHltaWEgPC0gc2NhbGUoZHlzdGh5bWlhJG1lYW5fZHlzdGh5bWlhKQoKIyBQcmludCB0aGUgcmVzdWx0aW5nIGRhdGEgZnJhbWUKcHJpbnQoZHlzdGh5bWlhKQoKCmBgYApgYGB7cn0KbGlicmFyeShkcGx5cikKCiMgUGVyZm9ybSBsZWZ0IGpvaW5zIGZvciBlYWNoIGRhdGEgZnJhbWUgb24gJ2NvdW50cnknCmZpbmFsX21lbnRhbF9oZWFsdGhfaW5kZXggPC0gbWVudGFsX2hlYWx0aF9pbmRleCAlPiUKICBsZWZ0X2pvaW4oYnVsaW1pYV9uZXJ2b3NhLCBieSA9ICJjb3VudHJ5IikgJT4lCiAgbGVmdF9qb2luKEFESEQsIGJ5ID0gImNvdW50cnkiKSAlPiUKICBsZWZ0X2pvaW4oSWRpb3BhdGhpY19kZXZlbG9wbWVudGFsX2ludGVsbGVjdHVhbF9kaXNhYmlsaXR5LCBieSA9ICJjb3VudHJ5IikgJT4lCiAgbGVmdF9qb2luKGFub3JleGlhX25lcnZvc2EsIGJ5ID0gImNvdW50cnkiKSAlPiUKICBsZWZ0X2pvaW4oZGVwcmVzc2l2ZV9kaXNvcmRlcnMsIGJ5ID0gImNvdW50cnkiKSAlPiUKICBsZWZ0X2pvaW4oYXV0aXNtdXNfc3BlY3RydW1fZGlzb3JkZXJzLCBieSA9ICJjb3VudHJ5IikgJT4lCiAgbGVmdF9qb2luKGNvbmR1Y3RfZGlzb3JkZXJzLCBieSA9ICJjb3VudHJ5IikgJT4lCiAgbGVmdF9qb2luKHNjaGl6b3BocmVuaWEsIGJ5ID0gImNvdW50cnkiKSAlPiUKICBsZWZ0X2pvaW4oZWF0aW5nX2Rpc29yZGVycywgYnkgPSAiY291bnRyeSIpICU+JQogIGxlZnRfam9pbihiaXBvbGFyX2Rpc29yZGVyLCBieSA9ICJjb3VudHJ5IikgJT4lCiAgbGVmdF9qb2luKGRydWdfdXNlX2Rpc29yZGVycywgYnkgPSAiY291bnRyeSIpICU+JQogIGxlZnRfam9pbihhbGNvaG9sX3VzZV9kaXNvcmRlcnMsIGJ5ID0gImNvdW50cnkiKSAlPiUKICBsZWZ0X2pvaW4oc3Vic3RhbmNlX3VzZV9kaXNvcmRlcnMsIGJ5ID0gImNvdW50cnkiKSAlPiUKICBsZWZ0X2pvaW4obWFqb3JfZGVwcmVzc2l2ZV9kaXNvcmRlciwgYnkgPSAiY291bnRyeSIpICU+JQogIGxlZnRfam9pbihkeXN0aHltaWEsIGJ5ID0gImNvdW50cnkiKQoKIyBEaXNwbGF5IHRoZSByZXN1bHRpbmcgZGF0YSBmcmFtZQpwcmludChmaW5hbF9tZW50YWxfaGVhbHRoX2luZGV4KQoKIyBTaG93IHRoZSBmaXJzdCBmZXcgcm93cyBvZiB0aGUgcmVzdWx0aW5nIGRhdGEgZnJhbWUKaGVhZChmaW5hbF9tZW50YWxfaGVhbHRoX2luZGV4KQoKYGBgCmBgYHtyfQppbmRpY2F0b3JzIDwtIGxlZnRfam9pbihmaW5hbF9tZW50YWxfaGVhbHRoX2luZGV4LCBoYXJkc2hpcCwgYnkgPSAiY291bnRyeSIpCmluZGljYXRvcnMKaGVhZChpbmRpY2F0b3JzKQoKbmV3X2RhdGEgPC0gbGVmdF9qb2luIChXVlNfZGF0YSwgaW5kaWNhdG9ycywgYnkgPSAiY291bnRyeSIpCm5ld19kYXRhCgoKIyBUcmFuc2Zyb20gcmlzayBpdGVtIHN1Y2ggdGhhdCBoaWdoIHZhbHVlcyByZXByZXNlbnQgbW9yZSByaXNrIHRha2luZwpuZXdfZGF0YSRyaXNrdGFraW5nID0gNiAtIG5ld19kYXRhJHJpc2t0YWtpbmcgKyAxCgogIAojIFRyYW5zZm9ybSByaXNrIHZhcmlhYmxlIGludG8gVC1zY29yZSAobWVhbiA9IDUwLCBzZCA9IDEwKQpuZXdfZGF0YSRUX3Njb3JlX3Jpc2t0YWtpbmcgPSAxMCpzY2FsZShuZXdfZGF0YSRyaXNrdGFraW5nLCBjZW50ZXI9VFJVRSxzY2FsZT1UUlVFKSs1MAoKbmV3X2RhdGEKCiNUcmFuc2Zvcm0gcmlzayB2YXJpYWJsZSBpbnRvIFogc2NvcmUgCgojIEFzc3VtaW5nIFQtc2NvcmVzIGhhdmUgYSBtZWFuIG9mIDUwIGFuZCBhIHN0YW5kYXJkIGRldmlhdGlvbiBvZiAxMApuZXdfZGF0YSRaX3Njb3JlX3Jpc2t0YWtpbmcgPSAobmV3X2RhdGEkVF9zY29yZV9yaXNrdGFraW5nIC0gNTApIC8gMTAKCiMgUHJpbnQgdGhlIHJlc3VsdGluZyBkYXRhIGZyYW1lCnByaW50KG5ld19kYXRhKQoKbmV3X2RhdGEgPC0gbmV3X2RhdGEgJT4lCiAgZ3JvdXBfYnkoY291bnRyeSkgJT4lCiAgbXV0YXRlKHpfc2NvcmVfYWdlID0gc2NhbGUoYWdlKSkKbmV3X2RhdGEKYGBgCmBgYHtyfQpsaWJyYXJ5KGxtZTQpCgpsaWJyYXJ5KGxtZTQpCgptb2RlbCA8LSBsbWVyKFRfc2NvcmVfcmlza3Rha2luZyB+IHNjYWxlKHpfc2NvcmVfYWdlKSAqIG1lbnRhbF9oZWFsdGggKwogICAgICAgICAgICAgICBnZW5kZXIgKiBtZW50YWxfaGVhbHRoICsKICAgICAgICAgICAgICAgZmFjdG9yKG1hcnJpZWQpICsgZmFjdG9yKGNoaWxkcmVuKSArCiAgICAgICAgICAgICAgIGZhY3RvcihlZHVjYXRpb24pICsgZmFjdG9yKGVtcGxveWVkKSArCiAgICAgICAgICAgICAgICgxICsgc2NhbGUoel9zY29yZV9hZ2UpICsgZmFjdG9yKG1hcnJpZWQpICsgZmFjdG9yKGNoaWxkcmVuKSArIAogICAgICAgICAgICAgICAgZmFjdG9yKGVkdWNhdGlvbikgKyBmYWN0b3IoZW1wbG95ZWQpIHwgY291bnRyeSksCiAgICAgICAgICAgICBkYXRhID0gbmV3X2RhdGEpCgoKc3VtbWFyeShtb2RlbCkKCiMgQXNzdW1pbmcgJ21vZGVsJyBpcyBhIGxpbmVhciBtaXhlZC1lZmZlY3RzIG1vZGVsIChsbWVyKSwgYW5kIHlvdSB3YW50IHRvIHNhdmUgY29lZmZpY2llbnRzIHRvIGEgQ1NWIGZpbGUKCiMgRXh0cmFjdCBjb2VmZmljaWVudHMgZnJvbSB0aGUgbW9kZWwgc3VtbWFyeQpjb2VmZmljaWVudHNfZGYgPC0gZGF0YS5mcmFtZShzdW1tYXJ5KG1vZGVsKSRjb2VmZmljaWVudHMpCgojIFdyaXRlIGNvZWZmaWNpZW50cyB0byBhIENTViBmaWxlCndyaXRlLmNzdihjb2VmZmljaWVudHNfZGYsICJtb2RlbF9jb2VmZmljaWVudHMuY3N2Iiwgcm93Lm5hbWVzID0gVFJVRSkKCmBgYAo=